home *** CD-ROM | disk | FTP | other *** search
- org 0
- b go
- org 0FF0H
- dw 1365
- org 10H
- sine: equ 0
- one: equ 1
- freq: equ 2
- phase: equ 3
- maskl: equ 6
- mask: equ 7
- sinx: equ 8
- cosx: equ 9
- mone: equ 11
- wkph: equ 13
- masko: equ 14
- mps: equ 15
- siny: equ 17
- mpc: equ 18
- cosy: equ 21
- cosine: equ 19
- coph: equ 20
- bit: equ 4
- sintbl: dw 0 ; coarse sine table
- dw 804
- dw 1607
- dw 2410
- dw 3211
- dw 4011
- dw 4807
- dw 5601
- dw 6392
- dw 7179
- dw 7961
- dw 8739
- dw 9511
- dw 10278
- dw 11038
- dw 11792
- dw 12539
- dw 13278
- dw 14009
- dw 14732
- dw 15446
- dw 16150
- dw 16845
- dw 17530
- dw 18204
- dw 18867
- dw 19519
- dw 20159
- dw 20787
- dw 21402
- dw 22004
- dw 22594
- dw 23169
- dw 23731
- dw 24278
- dw 24811
- dw 25329
- dw 25831
- dw 26318
- dw 26789
- dw 27244
- dw 27683
- dw 28105
- dw 28510
- dw 28897
- dw 29268
- dw 29621
- dw 29955
- dw 30272
- dw 30571
- dw 30851
- dw 31113
- dw 31356
- dw 31580
- dw 31785
- dw 31970
- dw 32137
- dw 32284
- dw 32412
- dw 32520
- dw 32609
- dw 32678
- dw 32727
- dw 32757
- dw 32767
- fines: dw 0 ; fine tuning table
- dw 12
- dw 25
- dw 37
- dw 50
- dw 62
- dw 75
- dw 87
- dw 100
- dw 113
- dw 125
- dw 138
- dw 150
- dw 163
- dw 175
- dw 188
- dw 201
- dw 213
- dw 226
- dw 238
- dw 251
- dw 263
- dw 276
- dw 289
- dw 301
- dw 314
- dw 326
- dw 339
- dw 351
- dw 364
- dw 376
- dw 389
- dw 402
- dw 414
- dw 427
- dw 439
- dw 452
- dw 464
- dw 477
- dw 490
- dw 502
- dw 515
- dw 527
- dw 540
- dw 552
- dw 565
- dw 578
- dw 590
- dw 603
- dw 615
- dw 628
- dw 640
- dw 653
- dw 665
- dw 678
- dw 691
- dw 703
- dw 716
- dw 728
- dw 741
- dw 753
- dw 766
- dw 779
- dw 791
- finec: dw 32767
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32766
- dw 32765
- dw 32765
- dw 32765
- dw 32765
- dw 32765
- dw 32765
- dw 32765
- dw 32765
- dw 32764
- dw 32764
- dw 32764
- dw 32764
- dw 32764
- dw 32764
- dw 32764
- dw 32763
- dw 32763
- dw 32763
- dw 32763
- dw 32763
- dw 32762
- dw 32762
- dw 32762
- dw 32762
- dw 32762
- dw 32761
- dw 32761
- dw 32761
- dw 32761
- dw 32760
- dw 32760
- dw 32760
- dw 32760
- dw 32759
- dw 32759
- dw 32759
- dw 32759
- dw 32758
- dw 32758
- dw 32758
- dw 32758
- dw 32757
- dw 32757
- go: ldpk 0
- larp 0
- lark ar0,15
- lack one
- sacl one
- sacl bit
- lac one,11
- sacl masko
- zac
- sub one
- sacl mone ; make and store minus one
- lac one,14
- sub one
- sacl mask ; make and store mask for modulo 16384 phase arithmetic
- lac one,6
- sub one
- sacl maskl ; make and store fine part of address mask;
- zac
- sacl phase
- lac one,8
- sub one
- sacl freq
- lac freq,4
- tblr freq
- wait: bioz fire ; is it time for a new sample
- b wait ; nope go wait in the corner
- fire: out sine,pa4 ; send it out here so that timing is maintained
- ; as the following routines have a variable length
- banz donch
- lark ar0,15
- in sine,pa3
- lac sine,4
- sub one,15
- bgz posbit
- lac mone
- sacl bit
- b donch
- posbit: lac one
- sacl bit
- donch: lack one
- sacl mps
- sacl mpc
- lac phase,0
- a: sacl wkph ; store a working copy
- lac wkph,4
- subh one
- blz getem ; is it in a quadrant bigger than first?
- subh one
- bgez thfr; is it in a quadrant greater than two?
- lac 1,13 ; nope so load pi
- sub wkph ; subtract phase so that it maps back into 1st quad
- sacl wkph ; store
- lac mone ; load -1
- sacl mpc ; store it in the cosine multiplier
- b getem ; go read tables
- thfr: lac mone ; multiplier for bottom half
- sacl mps ; store
- lac wkph ;
- sub one,13 ; map angle back to upper half and go do it again
- b a;
- getem: lac wkph,10
- sach coph
- lack sintbl
- add coph
- tblr sinx
- lac one,6
- sub coph
- sacl coph
- lack sintbl
- add coph
- tblr cosx
- lac wkph
- and maskl
- sacl coph
- lack fines
- add coph
- tblr siny
- lack finec
- add coph
- tblr cosy
- zac
- lt sinx
- mpy cosy
- lta siny
- mpy cosx
- apac
- sach sine
- lac 1,12
- sub wkph
- sacl wkph
- lac wkph,10
- sach coph
- lack sintbl
- add coph
- tblr sinx
- lac one,6
- sub coph
- sacl coph
- lack sintbl
- add coph
- tblr cosx
- lac wkph
- and maskl
- sacl coph
- lack fines
- add coph
- tblr siny
- lack finec
- add coph
- tblr cosy
- zac
- lt sinx
- mpy cosy
- lta siny
- mpy cosx
- apac
- sach cosine
- mult: lt mps
- mpy sine
- pac
- sacl sine
- mpy cosine
- pac
- sacl cosine
- lt mpc
- mpy cosine
- pac
- sacl cosine
- lt cosine
- mpy bit
- pac
- sacl cosine
- lac cosine,5 ; move top twelve bits into high order word
- addh masko ; add offset for ADC format;
- sach sine,0 ; store output value
- lac phase ; get ready to add freq (measured in phase rotation
- ; per sample)
- add freq ; add phase rotation
- and mask ; do mod 16384 arithmetic
- sacl phase ; store it
- b wait ; go output and then do it again
- end
-